<?php

/**
 * 角色管理
 *
 * @author JiangJian <silverd@sohu.com>
 * @copyright 2011-2012 xiangle.com
 * $Id: Role.php 162 2012-11-09 04:04:30Z Jun.Lu.726@gmail.com $
 * @version    2012-02-16  ::  JiangJian  ::  Create File
 */
class Controller_System_Role extends Controller_Abstract
{

    private $_role;

    public function init()
    {
        parent::init();
        $this->_role = Model('System_Role');
    }

    /**
     * 角色列表
     */
    public function indexAction()
    {
        $list = $this->_role->all();

        $this->assign('list', $list);
    }

    /**
     * 添加角色
     */
    public function addAction()
    {
        // 提交前
        if (!$this->isPost()) {

            // 所有可用的权限颗粒列表
            $privList = Model('System_Privilege')->getAssocList();

            $this->assign('privList', $privList);
            $this->assign('action', 'add');
            //$this->render('system/role_cu');
            // 提交后
        } else {

            $data   = $this->getPost();
            $result = $this->_role->add($data);
            if ($result !== true) {
                $this->alert($result, 'error');
            }

            $this->alert('添加角色成功', '/system/role');
        }
    }

    /**
     * 更新角色
     */
    public function updateAction()
    {
        $roleId = intval($this->get('role_id'));
        if ($roleId < 1) {
            $this->alert('非法的角色id', 'error');
        }

        $theOne = $this->_role->rowByPk($roleId);
        if (!$theOne) {
            $this->alert('角色信息不存在', 'error');
        }
        // 提交前
        if (!$this->isPost()) {
            // 所有可用的权限颗粒列表
            $privList = Model('System_Privilege')->getAssocList();

            // 当前选中的权限（即当前角色已有的权限）
            $privChecked = $theOne['privileges'] ? explode(',', $theOne['privileges']) : array();

            $this->assign('theOne', $theOne);
            $this->assign('privList', $privList);
            $this->assign('privChecked', $privChecked);
            $this->assign('action', 'update');

            // 提交后
        } else {
            $data   = $this->getPost();
            $result = $this->_role->update1($roleId, $data);
            if ($result !== true) {
                $this->alert($result, 'error');
            }

            $this->alert('修改角色成功', 'success', '/_system/role');
        }
    }

    /**
     * 删除角色
     */
    public function deleteAction()
    {
        $roleId = intval($this->get('role_id'));
        if ($roleId < 1) {
            $this->alert('非法的角色id', 'error');
        }

        if ($roleId == 1) {
            $this->alert('系统管理员组无法删除', 'error');
        }

        // 该角色组下还有所属的用户，则不能直接删除该角色
        $count = Model('System_Admin')->count(array('role_id' => $roleId));
        if ($count > 0) {
            $this->alert('角色组下属用户数不为0，无法删除', 'error');
        }

        if (!$this->_role->deleteByPk($roleId)) {
            $this->alert('删除角色失败', 'error');
        }

        $this->alert('删除角色成功', 'success');
    }

}